from builtins import print as _print
from sys import _getframe


# 自定义print函数 方便输出时候带上行号
def print(*arg, **kw):
	s = f'第{_getframe(1).f_lineno}行：'  # 注此处需加参数 1。
	return _print(s, *arg, **kw)


# ### os 模块
import os

# system()  在python中执行系统命令
# os.system("ifconfig")  # linux
# os.system("ipconfig")  # windows 默认是gbk编码来执行的，所以会出现乱码，可以使用popen来替代
# os.system("rm -rf ceshi.txt")

# popen()   执行系统命令返回对象,通过read方法读出字符串

obj = os.popen("ipconfig")
print(obj)
print(obj.read())

# listdir() 获取指定文件夹中所有内容的名称列表
lst = os.listdir()
print(lst)

# getcwd()  获取当前文件所在的默认路径
# 路径
res = os.getcwd()
print(res)  # windows中 文件斜杠是 \

# 路径 + 文件名 ***
print(__file__)  # windows中 文件斜杠是 /

# chdir()   修改当前文件工作的默认工作路径
os.chdir("./12_os模块")
print(os.popen("chdir").read())  # 此时输出的路径就变成了12_os模块了  # windows中 文件斜杠是 \

# environ   获取或修改环境变量
"""
[windows]
(1)右键qq属性找路径
(2)右键我的电脑属性->高级系统设置->环境变量->path 打开环境变量添加对应路径
(3)cmd => QQScLauncher

[linux]
(1)在家目录中创建个文件夹,里面创建个文件wangwen,写入ifconfig
(2)增加wangwen的可执行权限 chmod 777 wangwen 测试一下 sudo ./wangwen
(3)添加环境变量在os.environ["PATH"] 中拼接wangwen所有的绝对路径
(4)os.system("wangwen")

总结: 环境变量path的好处是,让系统自动的找到该命令的实际路径进行执行;
"""
print(os.environ['PATH'])
"""
environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\blade\\AppData\\Roaming',
         'COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files',
         'COMMONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files',
         'COMMONPROGRAMW6432': 'C:\\Program Files\\Common Files', 'COMPUTERNAME': 'DESKTOP-3M04QQP',
         'COMSPEC': 'C:\\Windows\\system32\\cmd.exe', 'DRIVERDATA': 'C:\\Windows\\System32\\Drivers\\DriverData',
         'FPS_BROWSER_APP_PROFILE_STRING': 'Internet Explorer', 'FPS_BROWSER_USER_PROFILE_STRING': 'Default',
         'HOMEDRIVE': 'C:', 'HOMEPATH': '\\Users\\blade', 'IDEA_INITIAL_DIRECTORY': 'C:\\Windows\\System32',
         'LOCALAPPDATA': 'C:\\Users\\blade\\AppData\\Local', 'LOGONSERVER': '\\\\DESKTOP-3M04QQP',
         'NUMBER_OF_PROCESSORS': '12', 'ONEDRIVE': 'C:\\Users\\blade\\OneDrive', 'OS': 'Windows_NT',
         'PATH': 'C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Windows\\System32\\OpenSSH\\;D:\\git\\Git\\cmd;D:\\微信小程序\\开发工具\\微信web开发者工具\\dll;D:\\python\\python3.8\\Scripts;D:\\python\\python3.8;C:\\Users\\blade\\AppData\\Local\\Microsoft\\WindowsApps;D:\\python\\IDE\\pycharm\\PyCharm 2021.1.2\\bin;;',
         'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC', 'PROCESSOR_ARCHITECTURE': 'AMD64',
         'PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 158 Stepping 10, GenuineIntel', 'PROCESSOR_LEVEL': '6',
         'PROCESSOR_REVISION': '9e0a', 'PROGRAMDATA': 'C:\\ProgramData', 'PROGRAMFILES': 'C:\\Program Files',
         'PROGRAMFILES(X86)': 'C:\\Program Files (x86)', 'PROGRAMW6432': 'C:\\Program Files',
         'PSMODULEPATH': 'C:\\Program Files\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules',
         'PUBLIC': 'C:\\Users\\Public', 'PYCHARM': 'D:\\python\\IDE\\pycharm\\PyCharm 2021.1.2\\bin;',
         'PYCHARM_DISPLAY_PORT': '63342', 'PYCHARM_HOSTED': '1', 'PYTHONIOENCODING': 'UTF-8',
         'PYTHONPATH': 'D:\\python\\CODE\\Python_Note;D:\\python\\IDE\\pycharm\\PyCharm 2021.1.2\\plugins\\python\\helpers\\pycharm_matplotlib_backend;D:\\python\\IDE\\pycharm\\PyCharm 2021.1.2\\plugins\\python\\helpers\\pycharm_display',
         'PYTHONUNBUFFERED': '1', 'SESSIONNAME': 'Console', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C:\\Windows',
         'TEMP': 'C:\\Users\\blade\\AppData\\Local\\Temp', 'TMP': 'C:\\Users\\blade\\AppData\\Local\\Temp',
         'USERDOMAIN': 'DESKTOP-3M04QQP', 'USERDOMAIN_ROAMINGPROFILE': 'DESKTOP-3M04QQP', 'USERNAME': 'blade',
         'USERPROFILE': 'C:\\Users\\blade', 'WINDIR': 'C:\\Windows'})
"""

os.environ["PATH"] += "E:\\A"  # 实际上没有添加成功，不知道为啥
print(os.environ["PATH"])

# --os 模块属性
# name 获取系统标识   linux,mac ->posix      windows -> nt
print(os.name)
# sep 获取路径分割符号  linux,mac -> /       window-> \
print(os.sep)
# linesep 获取系统的换行符号  linux,mac -> \n    window->\r\n 或 \n
print(repr(os.linesep))

"""
os 模块 (文件操作) 新建/删除/
"""

# os.chdir("./12_os模块")  # 前面已经把工作目录定义到了此处

# -- os模块具有 新建/删除/
# os.mknod   创建文件
# os.mknod("1.txt")  #   windows不支持，只有linux支持
# open("1.txt", "a+").close()

# os.remove  删除文件
# os.remove("1.txt")

# os.mkdir   创建目录(文件夹)
# os.mkdir("ceshi111")

# os.rmdir   删除目录(文件夹)
# os.rmdir("ceshi111")

# os.rename  对文件,目录重命名
# os.rename("2.txt", "3.txt")

# os.makedirs   递归创建文件夹
# os.makedirs("a/b/c/d/e/f")

# os.removedirs 递归删除文件夹（只能删除空文件夹）
# os.removedirs("a/b/c/d/e/f")


"""os.path 路径模块"""

pathvar = "12_os模块.py"
pathvar = __file__
# basename() 返回文件名部分
res = os.path.basename(pathvar)
print(res)

# dirname()  返回路径部分
res = os.path.dirname(pathvar)
print(res)

# split() 将路径拆分成单独的文件部分和路径部分 组合成一个元组
print(os.path.split(__file__))

# join()  将多个路径和文件组成新的路径 可以自动通过不同的系统加不同的斜杠  linux / windows\ ***
path1 = "home"
path2 = "wangwen"
path3 = "mywork"
pathvar = path1 + os.sep + path2 + os.sep + path3
print(pathvar)

# 用join改造
path_new = os.path.join(path1, path2, path3)
print(path_new)

# splitext() 将路径分割为后缀和其他部分 (了解)
pathvar = r"D:\python\CODE\Python_Note\01_Basis\03_提高\12_os模块.py"
print(os.path.splitext(pathvar))
print(pathvar.split(".")[-1])

# getsize()  获取文件的大小  ***
pathvar = os.path.dirname(__file__) # 方法一
# pathvar = os.getcwd()  # 方法二
path_new = os.path.join(pathvar, "12_os模块.py")
print(path_new)
# 计算文件大小
res = os.path.getsize(path_new)
print(res)
res = os.path.getsize(r"D:\python\CODE\Python_Note\01_Basis\03_提高\12_os模块.py")
print(res)

# isdir()    检测路径是否是一个文件夹  ***
res = os.path.isdir(r"D:\python\CODE\Python_Note\01_Basis\03_提高\12_os模块.py")
print(res)
# isfile()   检测路径是否是一个文件    ***
res = os.path.isfile(r"D:\python\CODE\Python_Note\01_Basis\03_提高\12_os模块.py")
print(res)
# islink()   检测路径数否是一个链接
res = os.path.islink(r"D:\python\CODE\Python_Note\01_Basis\03_提高\12_os模块.py")
print(res)

# getctime() [windows]文件的创建时间,[linux]权限的改动时间(返回时间戳)
import time

res = os.path.getctime(r"D:\python\CODE\Python_Note\01_Basis\03_提高\12_os模块.py")

# getmtime() 获取文件最后一次修改时间(返回时间戳)
res = os.path.getmtime(r"D:\python\CODE\Python_Note\01_Basis\03_提高\12_os模块.py")

# getatime() 获取文件最后一次访问时间(返回时间戳)
res = os.path.getatime(r"D:\python\CODE\Python_Note\01_Basis\03_提高\12_os模块.py")
print(res)
print(time.ctime(res))

# exists()   检测指定的路径是否存在 ***
res = os.path.exists("12_os模块.py")
print(res)
# res = os.path.exists("4.txt")
print(res, "<============>")

# isabs()    检测一个路径是否是绝对路径
res = os.path.isabs("12_os模块.py")
print(res)
# abspath()  将相对路径转化为绝对路径
res = os.path.abspath("12_os模块.py")
print(res)

pathvar = "12_os模块.py"
if not os.path.isabs(pathvar):
	abs_path = os.path.abspath("12_os模块.py")
print(abs_path)

# ### 作业题 : 计算一个文件夹中的所有文件大小
